package com.wn.main.ui.system.adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.blankj.utilcode.util.GsonUtils
import com.google.android.flexbox.FlexDirection
import com.google.android.flexbox.FlexWrap
import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import com.wn.common.model.SystemList
import com.wn.common.provider.MainServiceProvider
import com.wn.framework.adapter.BaseBindViewHolder
import com.wn.framework.adapter.BaseRecyclerViewAdapter
import com.wn.main.databinding.LayoutSystemItemBinding
import dagger.hilt.android.qualifiers.ActivityContext
import dagger.hilt.android.scopes.ActivityScoped
import javax.inject.Inject

/**
 * @Author: wn
 * @Date: 2025/4/28 16:53
 * @Description: 体系页 adapter
 */
@ActivityScoped
class SystemAdapter @Inject constructor(@ActivityContext private val context: Context) :
  BaseRecyclerViewAdapter<SystemList, LayoutSystemItemBinding>() {

  /**
   * 子类通过 xml实现 ViewBinding，父类提供了 LayoutInflater ，viewType
   * 可以根据不同的 viewType传递不同的 viewBinding -- when
   */
  override fun getViewBinding(
    layoutInflater: LayoutInflater,
    parent: ViewGroup,
    viewType: Int,
  ): LayoutSystemItemBinding = LayoutSystemItemBinding.inflate(layoutInflater, parent, false)

  /**
   * 子类重写该方法绑定数据
   * 重写 [getViewBinding] 即可实现不同ViewHolder传递
   */
  override fun setViewBinding(
    holder: BaseBindViewHolder<LayoutSystemItemBinding>,
    item: SystemList?,
    position: Int,
  ) {
    item?.apply {
      holder.binding.apply {
        // 设置标题
        title = name
        // 在这里 初始化 item 中 嵌套的 recyclerView
        recyclerViewItem.apply {
          layoutManager = FlexboxLayoutManager(this@SystemAdapter.context).apply {
            flexWrap = FlexWrap.WRAP // 支持换行
            flexDirection = FlexDirection.ROW // 主轴水平方向
            justifyContent = JustifyContent.FLEX_START // 主轴对齐方式为 左对齐
          }
          // adapter 实例
          SystemSecondAdapter().apply {
            recyclerViewItem.adapter = this
            // 为 adapter 设置数据
            setData(children)
            /**
             * 因为点击 list 嵌套的 子 list 并不会触发 跳转
             * 所以这里 给 子 list 的 item 设置点击事件 ，跳转时 携带 SystemList 的 json 字符串
             */
            onItemClickListener = { _: View, _: Int ->
              // 跳转到 体系详情页
              MainServiceProvider.toSystemDetail(context, GsonUtils.toJson(item))
            }
          }
        }
        // 点击整个 Item 去详情页
        holder.itemView.setOnClickListener {
          MainServiceProvider.toSystemDetail(context, GsonUtils.toJson(item))
        }
      }
    }
  }
}